﻿#include "CDataMySQL.h"
#include <QSqlQuery>
#include <QDebug>
CDataMySQL::CDataMySQL()
{
    /*
     * 总结：Qt的数据库连接管理是独立于局部变量生命周期的，只要不显式移除连接，即使创建连接的局部变量已经销毁，连接仍然保持可用状态。
     * 这是Qt提供的一种便利机制，使得数据库连接可以在多个地方共享使用。

    logWidget.cpp里面已经连接了数据库，所以直接使用就可以了
    学生信息的数据表已经创建了，在数据库里面进行了操作 tbl_stuInfo
    */
}

CDataMySQL::~CDataMySQL()
{

}

bool CDataMySQL::selectStuInfo(QList<CStuInfo> &stuInfoList)
{
    // 查询数据库中学生的信息
    QSqlQuery sql_select(QSqlDatabase::database("info_system"));
    // --------------------------------------------------------------------------------- 学生信息 表结构改变 需改的代码
    if(!sql_select.exec("select ID,NAME,GENDER,POLITICAL_ID,PHONE_NUM,ADDRESS,GPA from tbl_stuInfo")){
        qDebug() << "学生信息查询失败";
        return false;
    }
    // 绑定到学生信息类
    // --------------------------------------------------------------------------------- 学生信息 表结构改变 需改的代码
    while (sql_select.next()) {
        CStuInfo stuInfo;
        int id = sql_select.value("ID").toInt();
        QString name = sql_select.value("NAME").toString();
        QString gender = sql_select.value("GENDER").toString();
        QString politId = sql_select.value("POLITICAL_ID").toString();
        QString phoneNum = sql_select.value("PHONE_NUM").toString();
        QString address = sql_select.value("ADDRESS").toString();
        float gpa = sql_select.value("GPA").toFloat();

        stuInfo.setStuInfo(id,name,gender,politId,phoneNum,address,gpa);
        stuInfoList.append(stuInfo);
    }

    return true;
}

bool CDataMySQL::addStuInfo(CStuInfo &stuInfo)
{
    QSqlQuery sql_insert(QSqlDatabase::database("info_system"));
    QString sql = QString("insert into tbl_stuinfo "
                          "values(%1,'%2','%3','%4','%5','%6',%7)").arg(stuInfo.getId()).arg(stuInfo.getName())\
            .arg(stuInfo.getGender()).arg(stuInfo.getPolitId()).arg(stuInfo.getPhoneNum()).arg(stuInfo.getAddress()).arg(stuInfo.getGpa());
    if(!sql_insert.exec(sql)){
        qDebug() << "学生信息添加失败";
        return false;
    }
    return true;
}

bool CDataMySQL::deleteStuInfo(int id)
{
    QSqlQuery sql_delete(QSqlDatabase::database("info_system"));
    QString sql = QString("delete from tbl_stuinfo where id = %1").arg(id);
    if(!sql_delete.exec(sql)){
        qDebug() << "学生信息删除失败";
        return false;
    }
    return true;
}

bool CDataMySQL::updateStuInfo(CStuInfo &stuInfo,int idForMatch)
{
    QSqlQuery sql_update(QSqlDatabase::database("info_system"));
    QString sql = "UPDATE tbl_stuinfo SET "
                  "ID = :new_id, "
                  "NAME = :name, "
                  "GENDER = :gender, "
                  "POLITICAL_ID = :polit_id, "
                  "PHONE_NUM = :phone, "
                  "ADDRESS = :address, "
                  "GPA = :gpa "
                  "WHERE ID = :old_id";

    sql_update.prepare(sql);
    sql_update.bindValue(":new_id", stuInfo.getId());
    sql_update.bindValue(":name", stuInfo.getName());
    sql_update.bindValue(":gender", stuInfo.getGender());
    sql_update.bindValue(":polit_id", stuInfo.getPolitId());
    sql_update.bindValue(":phone", stuInfo.getPhoneNum());
    sql_update.bindValue(":address", stuInfo.getAddress());
    sql_update.bindValue(":gpa", stuInfo.getGpa());
    sql_update.bindValue(":old_id", idForMatch);

    if (!sql_update.exec()) {
        qDebug() << "学生信息修改失败";
        return false;
    }
    return true;
}
